1. Background Information
Computer systems typically include a processor, a random access memory device, and a read only memory device. Read only memory devices (ROM) provide a non-volatile form of memory that is not destroyed when power is removed from the computer system. Conventional computer systems are typically initialized (i.e. powered up) using the processing logic (i.e. firmware) stored within the ROM device internal to the computer system. Since the ROM device is non-volatile, the firmware within the ROM contains valid data or instructions. Conventional computer systems can, thus, be initialized using the firmware within the ROM.
Generally, the firmware stored in the ROM can be a basic input-output system (BIOS) software program. The execution of code that exists in the ROM is referred to as BIOS POST. The BIOS consists of code that provides the lowest level of interface to all the devices in the system and is responsible for early initialization and configuration of all the critical hardware resources of the computer system. With an open-system computer, such as a system which can have its configuration changed by adding or deleting either hardware or software components, the BIOS needs to have information about the current configuration of the system.
This information has generally been stored in complementary metal oxide semiconductor (CMOS) based memory. CMOS is non-volatile standalone coin-cell battery powered memory that is capable of retaining information, during periods of time when the computer system is not running. The CMOS RAM memory has typically been located in the same device that contains the Real Time Clock (RTC), a battery-backed clock that maintains the time and date independent of whether or not the computer system is powered on. The CMOS RAM contents hold critical pieces of data that are used by the system BIOS to decide on a particular policy of implementation for certain features.
Most modern operating systems (OSs), including Windows XP and later OSs, block CMOS content, such as system I/O port addresses, from non-OS software during the runtime environment functionality. The list of system I/O port addresses that are blocked includes the RTC along with other system input/output (I/O) addresses for the system timer, DMA and so forth. Since most of the modern OSs will block access to the CMOS RAM contents during runtime functionality, it is desirable that an alternative mechanism for accessing the CMOS RAM content be put in place.